<script>
    // 小程序私密消息

        // https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.html

        /*
            一、功能介绍

                    小程序私密消息功能是这样一种能力：

                            当分享者，分享小程序卡片给其他用户或者微信群后，其他用户点击此小程序卡片时，
                            
                            开发者可以鉴别点击卡片的用户是否被分享者分享过小程序卡片

                            ★、私密消息：运营人员分享小程序到个人或群之后，该消息只能在被分享者或被分享群内打开，不可以二次转发。

                            ★、用途：主要用于不希望目标客群外的人员看到的分享信息，比如带有较高金额活动的分享。
        */

        /*
            二、使用说明

                    1、分享

                                    创建业务活动后、分享小程序消息前，需要通过后台接口 createAcictivityId 创建 activityId，

                                    建立一个 activityId 与一个业务活动id 唯一关联。

                                    然后通过  wx.updateSareMenu 接口声明本次分享的消息为私密消息，私密消息具有 "不可二次转发性".

                                    声明完成后，可以通过右上角菜单、分享按钮组件、wx.shareApMessage(仅小游戏) 分享私密消息给个人、群聊。



                                    <1>、场景一：  个人分享给个人

                                            A---B
                                    
                                    <2>、场景二人：个人分享给群

                                                A---[B,C,D]

                                    eg: 示例代码

                                            wx.updateShareMenu({
                                                withShareTicket: true,
                                                isPrivateMessage: true,
                                                activityId: 'xxx',
                                            })

                    2、验证

                                  从群聊、单聊消息卡片进入小程序时，通过 "wx.authPrivateMessage 接口" 可以验证当前用户是否是私密消息的接受者，

                                  即验证这条消息是否是A 直接转发给B 或者A转发给B所在的群的。

                                  该接口使用前，需要通过 wx.login() 接口登录小程序。


                                <1>、接口参数

                                           参数             类型                  说明

                                        shareTicket       string               shareTicket


                                <2>、success回调

                                          参数             类型                  说明

                                    ①、vidlid           Boolean,            验证是否通过

                                    ②、iv               String              加密算法的初始向量，详细见 "加密数据解密算法"

                                                                            https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

                                    ③、encryptedData    String              经过加密的activityId，解密后可得到原始的activityId。
                                                                            若解密后得到的activityId可以与开发者后台的活动id对应上则验证通过，否则表明valid字段不可靠（被篡改） 详细见加密数据解密算法
                                    
                                    
                                <3>、注意事项

                                            ①、若返回的valid 字段为 false，表示此次验证不通过

                                            ②、若返回的valid字段为true，表示验证通过。

                                                    但是为了安全起见，预防valid字段被篡改的可能，可以把encryptedData和iv传到开发者后台去解密。

                                                    若解密后得到的activityId就是当前活动所对应的activityId 则验证通过，否则表示验证不通过。

                                            ③、当私密消息分享给群时，是按鉴别时刻用户是否在群里作为判断。

                                            ④、ctivityId创建后7天内分享有效，120天内验证有效。

        */

        /*
            三、示例代码
                                    
                            wx.authPrivateMessage({
                                shareTicket: 'xxxxxx',
                                success(res) {
                                    console.log('authPrivateMessage success', res)
                                    // res
                                    // {
                                    //   errMsg: 'authPrivateMessage:ok'
                                    //   valid: true
                                    //   iv: 'xxxx',
                                    //   encryptedData: 'xxxxxx'
                                    // }
                                },
                                fail(res) {
                                    console.log('authPrivateMessage fail', res)
                                }
                            })
        */
</script>